#region Copyright (c) 2003-2005, Luke T. Maxon

/********************************************************************************************************************
'
' Copyright (c) 2003-2005, Luke T. Maxon
' All rights reserved.
' 
' Redistribution and use in source and binary forms, with or without modification, are permitted provided
' that the following conditions are met:
' 
' * Redistributions of source code must retain the above copyright notice, this list of conditions and the
' 	following disclaimer.
' 
' * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
' 	the following disclaimer in the documentation and/or other materials provided with the distribution.
' 
' * Neither the name of the author nor the names of its contributors may be used to endorse or 
' 	promote products derived from this software without specific prior written permission.
' 
' THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
' WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
' PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
' ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
' LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
' INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
' OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
' IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'
'*******************************************************************************************************************/

#endregion

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using SuedeTest.Core.Actions;

namespace SuedeTest.Core {
   public abstract class TestWriter {

      protected List<SerializedAction> _actions;
     
      public TestWriter() {
         _actions = new List<SerializedAction>();
      }
      
      protected string _testName = "";
      public string TestName {
         get {
            return _testName;
         }

         set {
            _testName = value;
         }
      }


      protected string test = "";

      /// <summary>
      /// Gets the text representation of this test.
      /// </summary>
      /// <value>
      /// This test. Not effective values are set as empty strings.
      /// </value>
      public string Test {
         get {
            return test;
         }
      }

      /// <summary>
      /// Add an action to the list of actions.
      /// </summary>
      /// <param name="action">
      /// The action which will be added.
      /// </param>
      /// /// <exception cref="ArgumentException">
      /// This exception is thrown if <paramref name="action"/> is not effective.
      /// </exception>
      public virtual void AddAction(SerializedAction action) {
         if (action != null) {
            _actions.Add(action);
         } else {
            throw new ArgumentException();
         }
      }

      /// <summary>
      /// Clears the current test.
      /// </summary>
      public virtual void Clear() {
         test = string.Empty;
         _testName = string.Empty;
         _actions = new List<SerializedAction>();

         OnTestChanged();
      }

      protected void OnTestChanged() {
         if (TestChanged != null) {
            TestChanged(this, null);
         }
      }

      public event EventHandler TestChanged;
   }
}
